import {defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import path from 'path'
import viteCompression from 'vite-plugin-compression'

//热更新重新打印地址
function printServerUrlOnUpdate() {
    let server

    return {
        name: 'print-url-on-hmr',
        configureServer(_server) {
            server = _server
        },
        handleHotUpdate() {
            const {config} = server
            const port = config.server.port || 5173
            const host = config.server.host || 'localhost'
            console.log(`
  ➜  Local:   http://localhost:${port}
  ➜  Network: http://${host === '::' ? '127.0.0.1' : host}:${port}
  ➜  press h to show help
          `)
        }
    }
}

export default ({mode}) => {
    // 加载对应环境变量
    const env = loadEnv(mode, process.cwd())
    console.log(`当前环境: ${mode}`);
    console.log('API地址:', env.VITE_API_BASE_URL)
    const isProd = mode === 'production'

    return defineConfig({
        base: '/',
        plugins: [
            printServerUrlOnUpdate(),
            vue(),
            vueJsx(),
            // 👉 生产环境启用 gzip 压缩
            isProd && viteCompression({
                verbose: true,
                disable: false,
                threshold: 10240, // 文件超过10KB压缩
                algorithm: 'gzip',
                ext: '.gz',
            }),
        ],
        resolve: {
            alias: {
                '@': path.resolve(__dirname, './src'),
            },
        },

        server: {
            open: true, // 启动后自动打开浏览器
            host: true,
            port: 5173,
            strictPort: false,
            proxy: {
                '/base-api': {
                    target: env.VITE_API_BASE_URL,
                    changeOrigin: true,
                    rewrite: (path) => path.replace(/^\/base-api/, ''),
                },
            },
        },

        build: {
            target: 'es2015',            // 兼容性设置
            outDir: 'dist',              // 打包目录
            sourcemap: false,            // 是否生成 source map，设为 true 可调试生产包
            minify: 'terser',            // 使用 terser 压缩器
            terserOptions: {
                compress: {
                    drop_console: true,      // 去掉 console.*
                    drop_debugger: true,     // 去掉 debugger
                    dead_code: true,         //去除未使用的代码
                    unused: true,             //移除未使用的变量/函数
                },
            },
            rollupOptions: {
                output: {
                    manualChunks(id) {
                        if (id.includes('node_modules')) {
                            if (id.includes('vue')) {
                                return 'vue';
                            } else if (id.includes('lodash')) {
                                return 'lodash';
                            }
                            return 'vendor'; // 其他依赖合并到 vendor
                        }
                    },
                },
            },
        },
    })
}
